package dados;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Emanoel
 * Realiza a comunicação física com o BD.
 */
public class ComunicacaoBD {
    
    private static Connection obterConexao(String uniqueName){
        Connection conn = null;
        try {
            ArrayList<DefinicoesDB> definicoes = GerenciadorDados.carregarDefinicoesDB();
            DefinicoesDB escolhido = null;
            for (DefinicoesDB definicoesDB : definicoes) {
                if (definicoesDB.getUniqueName().equals(uniqueName)) {
                    escolhido = definicoesDB;
                }
            }
            
            if(escolhido != null){
                Class.forName(escolhido.getDriver());
                String connectionString = escolhido.getUrl()+"?user="+escolhido.getUsername()+"&password="+escolhido.getPassword();                
                conn = (Connection) DriverManager.getConnection(connectionString);                
            }
        } catch (SQLException ex) {
            Logger.getLogger(ComunicacaoBD.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(ComunicacaoBD.class.getName()).log(Level.SEVERE, null, ex);
        //} catch (ParserConfigurationException ex) {
            //Logger.getLogger(ComunicacaoBD.class.getName()).log(Level.SEVERE, null, ex);
        //} catch (IOException ex) {
            //Logger.getLogger(ComunicacaoBD.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            return conn;
        }
    }
    
    public static ResultSet executarQuery(String query, String database){
        try {
            Connection conn = obterConexao(database);
            Statement st = conn.createStatement();
            return st.executeQuery(query);
        } catch (SQLException ex) {
            Logger.getLogger(ComunicacaoBD.class.getName()).log(Level.SEVERE, null, ex);
        }        
        return null;
    }

}
